package cn.itedus.lottery.domain.strategy.service.algorithm.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/9/8 11:49
 */
public class 瓜分算法 {
    /*
      这个不是 瞬时 抽奖
      ,而是 时间段抽奖!


      - 首先定义奖池的大小  k
      参与的人数 n, 每个人中奖的概率相等!

      因为 需要扫描 所有的 人数 n , 所以这肯定不是一个
     */


    /*
     假设 奖池 是 10

     最后的 奖池中的 10个人  随机 瓜分 1000元

     这个过程就是下面模拟的过程， 完全随机的， 但是会不会存在 第一个人的获得 较多money 的概率比较大呢？

     */

    public static void main(String[] args) {
        int totalAmount = 1000;
        int numberOfPeople = 10;



        List<Integer> amounts = distributeMoney(totalAmount, numberOfPeople);
        System.out.println("分配结果：");
        for (int i = 0; i < numberOfPeople; i++) {
            System.out.println("第 " + (i + 1) + " 个人得到 " + amounts.get(i) + " 元");
        }

        int sum = amounts.stream().mapToInt(Integer::intValue).sum();
        System.out.println(sum);


    }

    public static List<Integer> distributeMoney(int totalAmount, int numberOfPeople) {
        List<Integer> amounts = new ArrayList<>();

        Random random = new Random();
        int remainingAmount = totalAmount;

        for (int i = 0; i < numberOfPeople - 1; i++) {
            int amount = random.nextInt(remainingAmount); // 随机生成每个人的金额，范围是剩余金额之内
            amounts.add(amount);
            remainingAmount -= amount;
        }

        amounts.add(remainingAmount); // 最后一个人得到剩余的金额

        return amounts;
    }




}
